
package library.model.dao;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import library.dto.BookDTO;
import library.dto.Category_HighDTO;
import library.dto.MemberDTO;
import library.dto.RentDTO;
import library.dto.WishlistDTO;
import library.dto.ZipcodeDTO;

import org.springframework.orm.ibatis.SqlMapClientTemplate;

public class LibraryDAO {
	private SqlMapClientTemplate sqlMap;

	public LibraryDAO(SqlMapClientTemplate sqlMap) {
		super();
		this.sqlMap = sqlMap;
	}
	//회원가입
	public void insertMember(MemberDTO mdto) throws SQLException {
		sqlMap.insert("insertMember", mdto);
	}
	// 중복된 ID 찾을떄, 회원정보 상세조회
	public MemberDTO selectMemberById(String id) throws SQLException {
		return (MemberDTO)sqlMap.queryForObject("selectMemberById", id);
	}
	
	//주민번호로 Id찾기, 주민번호 중복 찾기 
	public MemberDTO selectMemberByRegisterNumber(String name,String registerNo1, String registerNo2) throws SQLException{
		HashMap map = new HashMap();
		map.put("name", name);
		map.put("registerNo1", registerNo1);
		map.put("registerNo2", registerNo2);
		return (MemberDTO)sqlMap.queryForObject("selectMemberByRegisterNumber", map);
	}
	//id와 주민번호로 비밀번호찾기
	public MemberDTO selectMemberByPassword(String id, String registerNo1, String registerNo2) throws SQLException{
		HashMap map = new HashMap();
		map.put("id", id);
		map.put("registerNo1", registerNo1);
		map.put("registerNo2", registerNo2);
		return (MemberDTO)sqlMap.queryForObject("selectMemberByPassword",  map);
	}
	//사진업데이트
		public void updateUpfile(String id) throws SQLException {
			sqlMap.update("updatePictureFilename", id);
		}
	//회원정보 수정
	public void updateMemberById(MemberDTO mdto) throws SQLException {
		System.out.println(mdto);
		sqlMap.update("updateMemberById", mdto);
	}
	//회원탈퇴
	public void deleteMemberById(String id) throws SQLException{
		sqlMap.delete("deleteMemberById", id);
		sqlMap.delete("deleteMemberById1", id);
		
	}
	//전체 회원 조회 - ken
	public ArrayList<MemberDTO> selectAllMember() {	
		return (ArrayList<MemberDTO>)sqlMap.queryForList("selectAllMember");
	}
	//우편번호찾기
	public ArrayList<ZipcodeDTO> selectByDong(String dong) throws SQLException{
		return (ArrayList<ZipcodeDTO>)sqlMap.queryForList("selectByDong", dong);
	}
	//사람이름으로 회원 검색 - ken
	public ArrayList<MemberDTO> selectMemberByName(String name) {	
		return (ArrayList<MemberDTO>)sqlMap.queryForList("selectMemberByName", name);
	}
//	//대여현황
//	public ArrayList selectRentBreakDown(String id){
//		return (ArrayList)sqlMap.queryForList("selectRentBreakDown", id);
//	}
//	//희망도서 신청
//	public void insertWishlist(String id,String bookName, String publisher, String writer) throws SQLException {
//		HashMap map = new HashMap();
//		map.put("id", id);
//		map.put("bookname", bookName);
//		map.put("publisher", publisher);
//		map.put("writer", writer);
//		sqlMap.insert("insertWishlist",map);
//	}
//	
//	//희망도서 검색
//	public ArrayList selectWishList(String id) throws SQLException{
//		return (ArrayList)sqlMap.queryForList("selectWishList", id);
//	}
	//책 이름으로 도서 검색 -Yong
	public List selectBookByName(String name) throws SQLException{
		HashMap map = new HashMap();
		map.put("name", name);
		return sqlMap.queryForList("selectBookByName", map);
	}
//	//도서예약/대여/취소(보관중)
//	public void deleteBookRent(int no, String id ){
//		sqlMap.delete("deleteBookRent", no);
//	}
//	
	//대분류 도서 카테고리 조회 -Yong
	public ArrayList<Category_HighDTO> selectAllHighCategory() throws SQLException{
		return  (ArrayList<Category_HighDTO>) sqlMap.queryForList("getHighCategory");
	}
	//중분류 도서 카테고리 조회 - yong
	public ArrayList selectAllMiddleCategory(String CategoryHighId) throws SQLException{
		return (ArrayList) sqlMap.queryForList("getMiddleCategory", CategoryHighId);
	}
	//소분류 도서 카테고리 조회 - yong
	public ArrayList selectAllLowCategory(String CategoryMiddleId) throws SQLException{
		return (ArrayList) sqlMap.queryForList("getLowCategory", CategoryMiddleId);
	}
	//책 리스트 불러오기(분류) - yong
	public ArrayList selectBookByCategory(String CategoryLowId) throws SQLException{
		return (ArrayList) sqlMap.queryForList("getBookListByCategory", CategoryLowId);
	}
	//대여한 책이름으로 회원 조회 - ken
	public ArrayList<MemberDTO> selectMemberByBook(String book) throws SQLException{
		return (ArrayList<MemberDTO>)sqlMap.queryForList("selectMemberByBook", book);
	}
	//회원상태로 회원 조회 - ken
	public ArrayList<MemberDTO> selectMemberByState(int state) throws SQLException{
		return (ArrayList<MemberDTO>)sqlMap.queryForList("selectMemberByState", state);
	}
	//SN로 책 조회 - ken
	public BookDTO searchBookBySN(String sn) {
		return (BookDTO)sqlMap.queryForObject("selectBookBySN", sn);
	}
	//저자로 책 조회 - ken
	public List searchBookByWriter(String writer) {
		return (List)sqlMap.queryForList("selectBookByWriter", writer);
	}
	//전체 책 조회 - ken
	public List searchBookAll() {
		return (List)sqlMap.queryForList("selectBookAll");
	}
	//상태로 책 조회 - ken
	public List searchBookByState(int state) {	
		return (List)sqlMap.queryForList("selectBookByState", state);

	}
	
	//신착도서 결과 검색(7일 이내) - Yong
	public List selectBookByInputDate(HashMap map) {
		return (List)sqlMap.queryForList("selectBookByInputDate", map);
	}
	
	//인기 도서 검색 - Yong
	public List selectBookByCount(HashMap map) {
		return (List)sqlMap.queryForList("selectBookByCount", map);
	}
	
	//회원정보상세 - 대여/예약/희망도서 리스트
		public HashMap selectMemberBookList(String id) throws SQLException {
			ArrayList<RentDTO> rentbook = (ArrayList<RentDTO>) sqlMap.queryForList("selectRentbook",id);
			ArrayList<RentDTO> reservationbook = (ArrayList<RentDTO>)sqlMap.queryForList("selectReservationbook",id);
			ArrayList<WishlistDTO> wishbook = (ArrayList<WishlistDTO>)sqlMap.queryForList("selectWishbook",id);	
			HashMap map = new HashMap();
			map.put("rentbook", rentbook);
			map.put("wishbook", wishbook);
			map.put("reservationbook", reservationbook);
			return map;
		}
	
	
}